package com.example.permissionservice.service;

import com.example.permissionservice.dao.RoleResourceRelationMapper;
import com.example.permissionservice.pojo.Role;
import com.example.permissionservice.pojo.RoleResourceRelation;
import com.example.permissionservice.pojo.RoleResourceRelationExample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class RoleResourceRelationService {

    @Autowired
    RoleResourceRelationMapper roleResourceRelationMapper;


    /**
     * 该方法可以通过角色id删除关系
     */
    public int deleteRelationByRoleID(int role_id){
        RoleResourceRelationExample example = new RoleResourceRelationExample();
        example.createCriteria().andRole_idEqualTo(role_id);
        return roleResourceRelationMapper.deleteByExample(example);
    }

    /**
     * 该方法可以插入多条角色与资源之间的关系(用于更新一个角色拥有的资源)
     */
    public int insertRelation(List<RoleResourceRelation> list){
        return roleResourceRelationMapper.insertList(list);
    }

    /**
     * 该方法可以通过角色类对象来返回一个角色与资源之间的关系
     */
    public List<RoleResourceRelation>  getRelationByRole(Role role){
        //获取角色id
        int role_id = role.getId();
        //获取该角色拥有的资源列表
        List<Integer> resourceIdList = role.getResourceIdList();

        List<RoleResourceRelation> relationList = new ArrayList<>();

        for (Integer resource_id : resourceIdList){
            RoleResourceRelation relation = new RoleResourceRelation();
            relation.setRole_id(role_id);
            relation.setResource_id(resource_id);
            relationList.add(relation);
        }

        return relationList;
    }


    /**
     * 该方法可以通过角色对象来更新关系
     */
    public void updateRelationByRole(Role role){
        try {
            //先删除旧关系
            deleteRelationByRoleID(role.getId());
//            System.out.println("删除的关系的RoleId为:"+role.getId());
//            List<RoleResourceRelation> list = getRelationByRole(role);
//            System.out.println("插入的新关系为:"+list);
            //生成新关系
            insertRelation(getRelationByRole(role));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
